package com.yourenbang.lingyun.transaction.mapper;

import com.yourenbang.lingyun.domain.ScoreAccount;
import com.yourenbang.lingyun.transaction.web.domain.dto.fund.AllyTicketDTO;
import com.yourenbang.lingyun.transaction.web.domain.dto.fund.DetailTicketDTO;
import com.yourenbang.lingyun.transaction.web.domain.vo.fund.AllyTicketVO;
import com.yourenbang.lingyun.transaction.web.domain.vo.fund.DetailTicketVO;
import com.yourenbang.transaction.api.model.dto.fund.FundDetailDTO;
import com.yourenbang.transaction.api.model.dto.manage.QueryFundAccountDTO;
import com.yourenbang.transaction.api.model.dto.ticket.AddTicketDTO;
import com.yourenbang.transaction.api.model.vo.manage.QueryAccountTypeVO;
import com.yourenbang.transaction.api.model.vo.manage.QueryFundAccountDetailVO;
import com.yourenbang.transaction.api.model.vo.manage.QueryFundAccountVO;
import com.yourenbang.transaction.api.model.vo.manage.TopupRecordVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface MeScoreAccountMapper {
    /**
     * 用户加积分
     *
     * @param userId
     * @param accountType
     * @param scoreAmount
     * @return
     */
    int addUserScore(@Param("userId") String userId, @Param("accountType") Integer accountType, @Param("scoreAmount") BigDecimal scoreAmount);

    /**
     * 用户减积分
     *
     * @param userId
     * @param accountType
     * @param scoreAmount
     * @return
     */
    int subtractUserAcc(@Param("userId") String userId, @Param("accountType") Integer accountType, @Param("scoreAmount") BigDecimal scoreAmount);

    /**
     * 查询系统账户
     *
     * @param accountType
     * @return
     */
    ScoreAccount selectSysAccount(@Param("accountType") Integer accountType);

    /**
     * 查询用户账户
     *
     * @param userBaseId
     * @param accountType
     * @return
     */
    ScoreAccount selectUserAccount(@Param("userBaseId") String userBaseId, @Param("accountType") Integer accountType);

    /**
     * 解冻用户账户积分
     *
     * @param userId
     * @param accountType
     * @param scoreAmount
     * @return
     */
    int unFreeUserAcc(@Param("userId") String userId, @Param("accountType") Integer accountType, @Param("scoreAmount") BigDecimal scoreAmount);

    /**
     * 系统账户支出(可用-,已用+)
     *
     * @param accountType
     * @param scoreAmount
     * @return
     */
    int subtractSysAcc(@Param("accountType") Integer accountType, @Param("scoreAmount") BigDecimal scoreAmount);

    /**
     * 系统账户增加(收入+,可用+)
     *
     * @param accountType
     * @param scoreAmount
     * @return
     */
    int addSysAcc(@Param("accountType") Integer accountType, @Param("scoreAmount") BigDecimal scoreAmount);

    /**
     * 复合查询资金账户
     * @param dto
     * @return
     */
    List<QueryFundAccountVO> queryScoreAccount(QueryFundAccountDTO dto);

    /**
     * 查询资金账户类型
     * @return
     */
    List<QueryAccountTypeVO> queryScoreAccountType();


    /**
     * 查询积分账单明细账户类型
     * @return
     */
    List<QueryAccountTypeVO> queryScoreBillAccountType();


    /**
     * 查询账户详情
     * @param scoreAccountId
     * @return
     */
    QueryFundAccountDetailVO selectScoreAccountDetail(@Param("scoreAccountId") Integer scoreAccountId);

    /**
     * 查询账户充值记录
     * @param fundDetailDTO
     * @return
     */
    List<TopupRecordVO> selectTopupRecord(FundDetailDTO fundDetailDTO);

    /**
     * 查询系统积分账户
     * @return
     */
    List<ScoreAccount> getAllSysAccount();

    /**
     * 银小云兑换券账户查询
     */
    AllyTicketVO foundAllyTicket(AllyTicketDTO dto);

    /**
     * 银小云兑换券使用数
     */
    Integer foundAllyTicketUsed(@Param("userBaseId") String userBaseId);

    /**
     * 银小云兑换券拒绝数
     */
    Integer foundAllyTicketRefuse(@Param("userBaseId") String userBaseId);

    /**
     * 考拉快收兑换券使用数
     */
    Integer foundAllyTicketUsedKlks(@Param("userBaseId") String userBaseId);

    /**
     * 考拉快收兑换券拒绝数
     */
    Integer foundAllyTicketRefuseKlks(@Param("userBaseId") String userBaseId);

    /**
     * 银小云兑换券账单明细
     */
    List<DetailTicketVO> detailAllyTicket(DetailTicketDTO dto);

    /**
     * 考拉快收兑换券账单明细
     */
    List<DetailTicketVO> detailAllyTicketKlks(DetailTicketDTO dto);

    /**
     * 银小云未加兑换券账户查询
     */
    List<AddTicketDTO> fundTicketAccount(@Param("allyActivateHierarchyId") Integer allyActivateHierarchyId);

    /**
     * 考拉快收未加兑换券账户查询
     */
    List<AddTicketDTO> fundTicketAccountklks();

    /**
     * 银小云兑换券明细后台查询
     */
    List<DetailTicketVO> manageDetailAllyTicket(DetailTicketDTO dto);

    /**
     * 考拉快收兑换券明细后台查询
     */
    List<DetailTicketVO> manageDetailAllyTicketKlks(DetailTicketDTO dto);

    /**
     * 兑换券总数
     */
    Integer allyTicketIncome(AllyTicketDTO dto);

    /**
     * 可用兑换券
     */
    Integer allyTicketUseable(AllyTicketDTO dto);

    /**
     * 过期兑换券
     */
    Integer allyTicketExpiration(AllyTicketDTO dto);

}